Conditions | 1 |
Paths | 1 |
Total Lines | 524 |
Lines | 26 |
Ratio | 4.96 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | /* global API */ |
||
3 | $j(document).ready(function () { |
||
4 | var storage = new API.Storage(); |
||
5 | |||
6 | var password_picker_html = null; |
||
7 | var _this = this; |
||
8 | |||
9 | $j.ajax({ |
||
10 | url: API.extension.getURL('/html/inject/password_picker.html'), |
||
11 | contentType: 'text', |
||
12 | type: 'GET', |
||
13 | success: function (data) { |
||
14 | // Firefox parsed data as a XMLDoc, revert that |
||
15 | if (typeof data === 'object') { |
||
16 | data = '<div id="password_picker">' + data.documentElement.innerHTML + '</div>'; |
||
17 | } |
||
18 | password_picker_html = $j(data); |
||
19 | } |
||
20 | }); |
||
21 | |||
22 | function removePasswordPicker() { |
||
23 | $j('#password_picker').remove(); |
||
24 | } |
||
25 | |||
26 | function copyTextToClipboard(text) { |
||
27 | var copyFrom = document.createElement("textarea"); |
||
28 | copyFrom.textContent = text; |
||
29 | var body = document.getElementsByTagName('body')[0]; |
||
30 | body.appendChild(copyFrom); |
||
31 | copyFrom.select(); |
||
32 | document.execCommand('copy'); |
||
33 | body.removeChild(copyFrom); |
||
34 | } |
||
35 | _this.copyTextToClipboard = copyTextToClipboard; |
||
36 | |||
37 | function enterLoginDetails(login) { |
||
38 | var username = (login.username.trim() !== '' ) ? login.username : login.email; |
||
39 | |||
40 | fillPassword(username, login.password); |
||
41 | if ($j('#password_picker').is(':visible')) { |
||
42 | removePasswordPicker(); |
||
43 | } |
||
44 | } |
||
45 | |||
46 | _this.enterLoginDetails = enterLoginDetails; |
||
47 | function setupAddCredentialFields() { |
||
48 | var labelfield = $j('#savepw-label'); |
||
49 | labelfield.val(document.title); |
||
50 | var userfield = $j('#savepw-username'); |
||
51 | var pwfield = $j('#savepw-password'); |
||
52 | $j('.togglePw').click(function () { |
||
53 | $j('.togglePw').toggleClass('fa-eye').toggleClass('fa-eye-slash'); |
||
54 | if (pwfield.attr('type') === 'password') { |
||
55 | pwfield.attr('type', 'text'); |
||
56 | } else { |
||
57 | pwfield.attr('type', 'password'); |
||
58 | } |
||
59 | }); |
||
60 | |||
61 | $j('#savepw-save').click(function (e) { |
||
62 | e.preventDefault(); |
||
63 | API.runtime.sendMessage(API.runtime.id, { |
||
64 | method: "injectCreateCredential", args: { |
||
65 | label: labelfield.val(), |
||
66 | username: userfield.val(), |
||
67 | password: pwfield.val() |
||
68 | } |
||
69 | }); |
||
70 | }); |
||
71 | |||
72 | $j('#savepw-cancel').click(function () { |
||
73 | labelfield.val(document.title); |
||
74 | userfield.val(''); |
||
75 | pwfield.val(''); |
||
76 | removePasswordPicker(); |
||
77 | }); |
||
78 | |||
79 | } |
||
80 | |||
81 | function toggleFieldType(field) { |
||
82 | if ($j(field).attr('type').toLowerCase() === 'text') { |
||
83 | $j(field).attr('type', 'password'); |
||
84 | } else { |
||
85 | $j(field).attr('type', 'text'); |
||
86 | } |
||
87 | } |
||
88 | |||
89 | function genPwd(settings) { |
||
90 | /* jshint ignore:start */ |
||
91 | var password = generatePassword(settings['length'], |
||
92 | settings.useUppercase, |
||
93 | settings.useLowercase, |
||
94 | settings.useDigits, |
||
95 | settings.useSpecialChars, |
||
96 | settings.minimumDigitCount, |
||
97 | settings.avoidAmbiguousCharacters, |
||
98 | settings.requireEveryCharType); |
||
99 | /* jshint ignore:end */ |
||
100 | return password; |
||
101 | } |
||
102 | |||
103 | function getPasswordGenerationSettings(cb) { |
||
104 | var default_settings = { |
||
105 | 'length': 12, |
||
106 | 'useUppercase': true, |
||
107 | 'useLowercase': true, |
||
108 | 'useDigits': true, |
||
109 | 'useSpecialChars': true, |
||
110 | 'minimumDigitCount': 3, |
||
111 | 'avoidAmbiguousCharacters': false, |
||
112 | 'requireEveryCharType': true |
||
113 | }; |
||
114 | storage.get('password_generator_settings').then(function (_settings) { |
||
115 | if (!_settings) { |
||
116 | _settings = default_settings; |
||
117 | } |
||
118 | |||
119 | cb(_settings); |
||
120 | }).error(function () { |
||
121 | cb(default_settings); |
||
122 | }); |
||
123 | } |
||
124 | |||
125 | function setupPasswordGenerator() { |
||
126 | //getPasswordGeneratorSettings |
||
127 | getPasswordGenerationSettings(function (settings) { |
||
128 | var round = 0; |
||
129 | |||
130 | function generate_pass() { |
||
131 | var new_password = genPwd(settings); |
||
132 | $j('#generated_password').val(new_password); |
||
133 | setTimeout(function () { |
||
134 | if (round < 10) { |
||
135 | generate_pass(); |
||
136 | round++; |
||
137 | } else { |
||
138 | round = 0; |
||
139 | } |
||
140 | }, 10); |
||
141 | } |
||
142 | |||
143 | $j.each(settings, function (setting, val) { |
||
144 | if (typeof(val) === "boolean") { |
||
145 | $j('[name="' + setting + '"]').prop('checked', val); |
||
146 | } else { |
||
147 | $j('[name="' + setting + '"]').val(val); |
||
148 | } |
||
149 | }); |
||
150 | |||
151 | $j('form[name="advancedSettings"]').change(function () { |
||
152 | var pw_settings_form = $j(this); |
||
153 | settings = pw_settings_form.serializeObject(); |
||
154 | storage.set('password_generator_settings', settings); |
||
155 | }); |
||
156 | |||
157 | $j('.renewpw').click(function () { |
||
158 | generate_pass(); |
||
159 | }); |
||
160 | $j('.renewpw').click(); |
||
161 | |||
162 | $j('.usepwd').click(function () { |
||
163 | $j('#savepw-password').val($j('#generated_password').val()); |
||
164 | $j('.tab.add').click(); |
||
165 | }); |
||
166 | |||
167 | $j('.togglePwVis').click(function () { |
||
168 | toggleFieldType('#generated_password'); |
||
169 | $j(this).find('.fa').toggleClass('fa-eye-slash').toggleClass('fa-eye'); |
||
170 | }); |
||
171 | |||
172 | $j('.adv_opt').click(function () { |
||
173 | |||
174 | var adv_settings = $j('.pw-setting-advanced'); |
||
175 | $j(this).find('i').toggleClass('fa-angle-right').toggleClass('fa-angle-down'); |
||
176 | if (adv_settings.is(':visible')) { |
||
177 | adv_settings.slideUp(); |
||
178 | } else { |
||
179 | adv_settings.slideDown(); |
||
180 | } |
||
181 | }); |
||
182 | }); |
||
183 | } |
||
184 | |||
185 | function showPasswordPicker(form) { |
||
186 | var loginField = $j(form[0]); |
||
187 | var loginFieldPos = loginField.offset(); |
||
188 | var passwordField = $j(form[1]); |
||
189 | var passwordFieldPos = passwordField.offset(); |
||
190 | |||
191 | var left = loginFieldPos.left; |
||
192 | var top = loginFieldPos.top; |
||
193 | |||
194 | if (passwordFieldPos.top > loginFieldPos.top) { |
||
195 | //console.log('login fields below each other') |
||
196 | top = passwordFieldPos.top + passwordField.height() + 10; |
||
197 | |||
198 | } else { |
||
199 | // console.log('login fields next to each other') |
||
200 | top = top + loginField.height() + 10; |
||
201 | } |
||
202 | |||
203 | var position = $j(form[1]).position(); |
||
|
|||
204 | $j(document.body).after($j(password_picker_html)); |
||
205 | |||
206 | var picker = $j('#password_picker'); |
||
207 | picker.css('position', 'absolute'); |
||
208 | picker.css('left', left); |
||
209 | picker.css('top', top); |
||
210 | // picker.css('width', $j(form).width()); |
||
211 | picker.find('.tab').click(function () { |
||
212 | var target = $j(this).attr('class').replace('active', '').replace('tab', '').trim(); |
||
213 | picker.find('.tab').removeClass('active'); |
||
214 | picker.find('.tab-content').children().hide(); |
||
215 | picker.find('.tab-' + target + '-content').show(); |
||
216 | picker.find('.tab.' + target).addClass('active'); |
||
217 | }); |
||
218 | |||
219 | $j('.tab.close').click(function () { |
||
220 | picker.find('.tab-list-content').show(); |
||
221 | removePasswordPicker(); |
||
222 | }); |
||
223 | |||
224 | var url = window.location.href; |
||
225 | API.runtime.sendMessage(API.runtime.id, {method: "getCredentialsByUrl", args: [url]}).then(function (logins) { |
||
226 | if (logins.length !== 0) { |
||
227 | picker.find('.tab-list-content').html(''); |
||
228 | } |
||
229 | for (var i = 0; i < logins.length; i++) { |
||
230 | var login = logins[i]; |
||
231 | var row = $j('<div class="account">' + login.label + '<br /><small>' + login.username + '</small></div>'); |
||
232 | row.click((function (login) { |
||
233 | return function () { |
||
234 | enterLoginDetails(login); |
||
235 | }; |
||
236 | })(login)); |
||
237 | |||
238 | picker.find('.tab-list-content').append(row); |
||
239 | } |
||
240 | }); |
||
241 | $j('.no-credentials .save').on('click', function () { |
||
242 | $j('.tab.add').click(); |
||
243 | }); |
||
244 | $j('.no-credentials .gen').on('click', function () { |
||
245 | $j('.tab.generate').click(); |
||
246 | }); |
||
247 | setupAddCredentialFields(); |
||
248 | setupPasswordGenerator(); |
||
249 | } |
||
250 | |||
251 | function createFormIcon(el, form) { |
||
252 | var offset = el.offset(); |
||
253 | var width = el.width(); |
||
254 | var height = el.height(); |
||
255 | var margin = (el.css('margin')) ? parseInt(el.css('margin').replace('px', '')) : 0; |
||
256 | var padding = (el.css('padding')) ? parseInt(el.css('padding').replace('px', '')) : 0; |
||
257 | var paddingRight = parseInt(el.css('padding-right').replace('px', '')); |
||
258 | var fontSize = el.css('font-size'); |
||
259 | var borderh = (el.css('border-height')) ? el.css('border-height') : '2px'; |
||
260 | var borderw = (el.css('border-width')) ? el.css('border-width') : '2px'; |
||
261 | var borderColor = el.css('border-color'); |
||
262 | var borderHeight = parseInt(borderh.replace('px', '')); |
||
263 | var borderWidth = parseInt(borderw.replace('px', '')); |
||
264 | var iconWidth = width * 0.1; |
||
265 | var pickerButton = $j('<span class="passwordPickerIcon" style="display: inline-block"> </span>'); |
||
266 | $j('body').append(pickerButton); |
||
267 | if (el.find('.passwordPickerIcon').length > 0) { |
||
268 | pickerButton = el.find('.passwordPickerIcon')[0]; |
||
269 | } |
||
270 | |||
271 | |||
272 | //pickerButton.css('background-image', 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAAXNSR0IArs4c6QAAAPhJREFUOBHlU70KgzAQPlMhEvoQTg6OPoOjT+JWOnRqkUKHgqWP4OQbOPokTk6OTkVULNSLVc62oJmbIdzd95NcuGjX2/3YVI/Ts+t0WLE2ut5xsQ0O+90F6UxFjAI8qNcEGONia08e6MNONYwCS7EQAizLmtGUDEzTBNd1fxsYhjEBnHPQNG3KKTYV34F8ec/zwHEciOMYyrIE3/ehKAqIoggo9inGXKmFXwbyBkmSQJqmUNe15IRhCG3byphitm1/eUzDM4qR0TTNjEixGdAnSi3keS5vSk2UDKqqgizLqB4YzvassiKhGtZ/jDMtLOnHz7TE+yf8BaDZXA509yeBAAAAAElFTkSuQmCC")'); |
||
273 | pickerButton.css('background-image', 'url("data:image/png;base64,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")'); |
||
274 | pickerButton.css('background-repeat', 'no-repeat'); |
||
275 | pickerButton.css('background-attachment', 'scroll'); |
||
276 | //pickerButton.css('background-size', '16px 18px'); |
||
277 | pickerButton.css('background-size', 'contain'); |
||
278 | pickerButton.css('background-position', '98% 50%'); |
||
279 | pickerButton.css('cursor', 'pointer'); |
||
280 | pickerButton.css('text-align', 'center'); |
||
281 | pickerButton.css('box-sizing', 'content-box'); |
||
282 | pickerButton.css('position', 'absolute'); |
||
283 | /* |
||
284 | pickerButton.css('background-color', 'rgb(234, 234, 234)'); |
||
285 | pickerButton.css('border-top-right-radius', el.css('border-top-right-radius')); |
||
286 | pickerButton.css('border-bottom-right-radius', el.css('border-bottom-right-radius')); |
||
287 | pickerButton.css('border-color', borderColor);*/ |
||
288 | |||
289 | pickerButton.css('z-index', '999'); |
||
290 | pickerButton.css('width', iconWidth); |
||
291 | |||
292 | |||
293 | pickerButton.css('padding', padding); |
||
294 | pickerButton.css('font-size', fontSize); |
||
295 | pickerButton.css('height', height); |
||
296 | pickerButton.css('margin', margin); |
||
297 | pickerButton.css('font-weight', el.css('font-weight')); |
||
298 | pickerButton.css('top', Math.round((offset.top + (height / 4) - margin / 2 - padding / 2 ) - (borderHeight / 2)) + 'px'); |
||
299 | pickerButton.css('left', Math.round((offset.left + width * 0.9) + paddingRight - padding + borderWidth) + 'px'); |
||
300 | |||
301 | |||
302 | var onClick = function () { |
||
303 | showPasswordPicker(form); |
||
304 | }; |
||
305 | |||
306 | //$j('body').append(pickerButton); |
||
307 | |||
308 | pickerButton.find('fa-key').click(onClick); |
||
309 | $j(pickerButton).click(onClick); |
||
310 | |||
311 | } |
||
312 | |||
313 | function createPasswordPicker(form) { |
||
314 | for (var i = 0; i < form.length; i++) { |
||
315 | var el = $j(form[i]); |
||
316 | createFormIcon(el, form); |
||
317 | |||
318 | } |
||
319 | } |
||
320 | |||
321 | function updatePositions() { |
||
322 | $j('.passwordPickerIcon').remove(); |
||
323 | var forms = getLoginFields(); |
||
324 | for (var f = 0; f < forms.length; f++) { |
||
325 | var form = forms[f]; |
||
326 | for (var i = 0; i < form.length; i++) { |
||
327 | var el = $j(form[i]); |
||
328 | createFormIcon(el, form); |
||
329 | } |
||
330 | } |
||
331 | } |
||
332 | |||
333 | |||
334 | function togglePasswordPicker(e) { |
||
335 | if (e.target.className === "passwordPickerIcon" || e.target.className === "fa fa-key") { |
||
336 | return; |
||
337 | } |
||
338 | var picker = $j('#password_picker'); |
||
339 | if (!picker.is(e.target) |
||
340 | && picker.has(e.target).length === 0 |
||
341 | |||
342 | ) { |
||
343 | if (picker) { |
||
344 | picker.remove(); |
||
345 | } |
||
346 | } |
||
347 | } |
||
348 | |||
349 | function formSubmitted(fields) { |
||
350 | var user = fields[0].value; |
||
351 | var pass = fields[1].value; |
||
352 | var params = { |
||
353 | username: user, |
||
354 | password: pass |
||
355 | }; |
||
356 | //Disable password mining |
||
357 | //$j(fields[1]).attr('type', 'hidden'); |
||
358 | API.runtime.sendMessage(API.runtime.id, {method: "minedForm", args: params}); |
||
359 | |||
360 | } |
||
361 | |||
362 | function inIframe() { |
||
363 | try { |
||
364 | return window.self !== window.top; |
||
365 | } catch (e) { |
||
366 | return true; |
||
367 | } |
||
368 | } |
||
369 | |||
370 | |||
371 | function checkForMined() { |
||
372 | if (inIframe()) { |
||
373 | return; |
||
374 | } |
||
375 | |||
376 | API.runtime.sendMessage(API.runtime.id, {method: "getMinedData"}).then(function (data) { |
||
377 | if (!data) { |
||
378 | return; |
||
379 | } |
||
380 | if (data.hasOwnProperty('username') && data.hasOwnProperty('password') && data.hasOwnProperty('url')) { |
||
381 | var doorhanger = $j('<div id="password-toolbar" class="container" style="display: none;"><span class="toolbar-text">' + data.title + ' ' + data.username + ' at ' + data.url + '</span></div>'); |
||
382 | |||
383 | var btnText = (data.guid === null) ? 'Save' : 'Update'; |
||
384 | var btnSave = $j('<button class="btn btn-success">' + btnText + '</button>'); |
||
385 | var btnCancel = $j('<button class="btn btn-default">Cancel</button>'); |
||
386 | btnSave.click(function () { |
||
387 | //closeToolbar(); |
||
388 | API.runtime.sendMessage(API.runtime.id, {method: "saveMined"}); |
||
389 | }); |
||
390 | |||
391 | btnCancel.click(function () { |
||
392 | closeToolbar(); |
||
393 | API.runtime.sendMessage(API.runtime.id, {method: "clearMined"}); |
||
394 | }); |
||
395 | |||
396 | doorhanger.append(btnCancel).append(btnSave); |
||
397 | $j('#password-toolbar').remove(); |
||
398 | $j('body').append(doorhanger); |
||
399 | $j('#password-toolbar').slideDown(); |
||
400 | } |
||
401 | }); |
||
402 | } |
||
403 | |||
404 | function minedLoginSaved(args) { |
||
405 | // If the login added by the user then this is true |
||
406 | if (args.selfAdded) { |
||
407 | enterLoginDetails(args.credential); |
||
408 | return; |
||
409 | } |
||
410 | if ($j('#password-toolbar').is(':visible')) { |
||
411 | var action = (args.updated) ? 'updated' : 'saved'; |
||
412 | $j('#password-toolbar').html('Credential ' + action + '!'); |
||
413 | setTimeout(function () { |
||
414 | closeToolbar(); |
||
415 | View Code Duplication | }, 2500); |
|
416 | } |
||
417 | } |
||
418 | |||
419 | _this.minedLoginSaved = minedLoginSaved; |
||
420 | |||
421 | function closeToolbar() { |
||
422 | $j('#password-toolbar').slideUp(400, function () { |
||
423 | $j('#password-toolbar').remove(); |
||
424 | }); |
||
425 | } |
||
426 | |||
427 | function insertFontCSS() { |
||
428 | var fontPath = API.extension.getURL(''); |
||
429 | var fontCss = ["@font-face {", |
||
430 | "font-family: 'FontAwesome';", |
||
431 | "src: url('" + fontPath + "fonts/fontawesome-webfont.eot?v=4.7.0');", |
||
432 | "src: url('" + fontPath + "fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('" + fontPath + "fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('" + fontPath + "fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('" + fontPath + "fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('" + fontPath + "fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');", |
||
433 | "font-weight: normal;", |
||
434 | "font-style: normal;", |
||
435 | "}"]; |
||
436 | if (window.navigator.userAgent.indexOf('Firefox') !== -1) { |
||
437 | fontCss[2] = "src: url('" + fontPath + "fonts/fontawesome-webfont.eot?v=4.7.0');"; |
||
438 | fontCss[3] = "src: url('" + fontPath + "fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('" + fontPath + "fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('" + fontPath + "fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('" + fontPath + "fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('" + fontPath + "fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');"; |
||
439 | } |
||
440 | var css = fontCss.join(''); |
||
441 | var style = document.createElement('style'), |
||
442 | head = document.head || document.getElementsByTagName('head')[0]; |
||
443 | |||
444 | style.type = 'text/css'; |
||
445 | if (style.styleSheet) { |
||
446 | style.styleSheet.cssText = css; |
||
447 | } else { |
||
448 | style.appendChild(document.createTextNode(css)); |
||
449 | } |
||
450 | |||
451 | head.appendChild(style); |
||
452 | } |
||
453 | |||
454 | |||
455 | function init() { |
||
456 | insertFontCSS(); |
||
457 | $j(document).unbind('click', togglePasswordPicker); |
||
458 | checkForMined(); |
||
459 | API.runtime.sendMessage(API.runtime.id, {method: 'getRuntimeSettings'}).then(function (result) { |
||
460 | var disablePasswordPicker = result.disablePasswordPicker; |
||
461 | |||
462 | var loginFields = getLoginFields(); |
||
463 | if (loginFields.length > 0) { |
||
464 | //@TODO prevent chrome from captuting pw's: http://stackoverflow.com/questions/27280461/prevent-chrome-from-prompting-to-save-password-from-input-box |
||
465 | for (var i = 0; i < loginFields.length; i++) { |
||
466 | var form = getFormFromElement(loginFields[i][0]); |
||
467 | if(!disablePasswordPicker) { |
||
468 | createPasswordPicker(loginFields[i], form); |
||
469 | } |
||
470 | //Password miner |
||
471 | $j(form).submit((function (loginFields) { |
||
472 | return function () { |
||
473 | formSubmitted(loginFields); |
||
474 | }; |
||
475 | })(loginFields[i])); |
||
476 | } |
||
477 | |||
478 | var url = window.location.href; //@TODO use a extension function |
||
479 | API.runtime.sendMessage(API.runtime.id, { |
||
480 | method: "getCredentialsByUrl", |
||
481 | args: [url] |
||
482 | }).then(function (logins) { |
||
483 | //console.log('Found ' + logins.length + ' logins for this site'); |
||
484 | if (logins.length === 1) { |
||
485 | API.runtime.sendMessage(API.runtime.id, {method: 'isAutoFillEnabled'}).then(function (isEnabled) { |
||
486 | if (isEnabled) { |
||
487 | enterLoginDetails(logins[0]); |
||
488 | } |
||
489 | }); |
||
490 | } |
||
491 | |||
492 | }); |
||
493 | } |
||
494 | |||
495 | }); |
||
496 | |||
497 | $j(document).click(togglePasswordPicker); |
||
498 | $j(window).on('resize', function () { |
||
499 | if (getLoginFields().length > 0) { |
||
500 | updatePositions(); |
||
501 | } |
||
502 | }); |
||
503 | } |
||
504 | |||
505 | var readyStateCheckInterval = setInterval(function () { |
||
506 | if (document.readyState === "complete") { |
||
507 | clearInterval(readyStateCheckInterval); |
||
508 | API.runtime.sendMessage(API.runtime.id, {method: 'getMasterPasswordSet'}).then(function (result) { |
||
509 | if (result) { |
||
510 | init(); |
||
511 | } else { |
||
512 | console.log('[Passman extension] Stopping, vault key not set'); |
||
513 | } |
||
514 | }); |
||
515 | |||
516 | var body = document.getElementsByTagName('body')[0]; |
||
517 | observeDOM(body, function () { |
||
518 | //init() |
||
519 | }); |
||
520 | } |
||
521 | }, 10); |
||
522 | |||
523 | API.runtime.onMessage.addListener(function (msg, sender, sendResponse) { |
||
524 | _this[msg.method](msg.args, sender); |
||
525 | }); |
||
526 | }); |